<?php
    class PanierDetail {
        //Alias sur table : pd
        public $panier;
        public $produit;
        public $vente_privee_detail;
        public $quantite;

        //Constructeur complet
        //(Panier)panier, (Produit)produit, (VentePriveeDetail)vente_privee_detail
        public function __construct($panier, $produit, $vente_privee_detail, $quantite) {
            $this->setPanier($panier);
            $this->setProduit($produit);
            $this->setVentePriveeDetail($vente_privee_detail);
            $this->setQuantite($quantite);
        }

        //Ajoute un objet PanierDetail à la BDD
        //Paramètre : aucun
        //Retourne (PanierDetail)
        public function add() {
            if(!$this->produit instanceof Produit) {
                return false;
            }
            
            $id_vente_privee_detail = 'NULL';
            if($this->vente_privee_detail instanceof VentePriveeDetail) {
                $id_vente_privee_detail = $this->vente_privee_detail->getId();
            }
            
            $panier_detail = NULL;
            $sql =  'SELECT 
                        pd.quantite as pdquantite
                    FROM panier_detail pd
                    WHERE
                        pd.id_panier = '.intval($this->panier->getId()).'
                    AND pd.id_produit = '.intval($this->produit->getId());
            if(is_integer($id_vente_privee_detail)) {
                $sql .= ' AND pd.id_vente_privee_detail = '.$id_vente_privee_detail;
            }
            else {
                $sql .= ' AND pd.id_vente_privee_detail IS NULL';
            }
            $ps = Db::Execute($sql, true);
            foreach($ps as $p) {
                $panier_detail = new PanierDetail($this->panier, $this->produit, $this->vente_privee_detail, $p['pdquantite']);
            }
            
            
            if($panier_detail) {
                $this->setQuantite($this->quantite + $panier_detail->getQuantite());
                $sql =  'UPDATE panier_detail
                        SET quantite = '.intval($this->quantite).'
                        WHERE
                            id_panier = '.intval($this->panier->getId()).'
                        AND id_produit = '.intval($this->produit->getId());
                if(is_integer($id_vente_privee_detail)) {
                    $sql .= ' AND id_vente_privee_detail = '.$id_vente_privee_detail;
                }
                else {
                    $sql .= ' AND id_vente_privee_detail IS NULL';
                }
                Db::Execute($sql);
            }
            else {
                $sql =  'INSERT INTO panier_detail (id_panier, id_produit, id_vente_privee_detail, quantite) VALUES
                        ('.$this->panier->getId().', '.intval($this->produit->getId()).', '.$id_vente_privee_detail.', '.intval($this->quantite).')';
                Db::Execute($sql);
            }
            return $this;
        }
        
        //Récupère le prix global de cette ligne de PanierDetail
        //Paramètre : OPTIONNEL (Booléen)ttc
        //Retourne (double)
        public function getPrix($ttc = true) {
            if($this->vente_privee_detail instanceof VentePriveeDetail && $this->vente_privee_detail->getId() != 0) {
                $temp = $this->vente_privee_detail->getPrixActuel($ttc) * $this->quantite;
            }
            else {
                $temp = $this->produit->getPrixActuel($ttc) * $this->quantite;
            }
            
            return number_format($temp, 2);
        }
        
        //GETTERS ET SETTERS
        public function getPanier() {return $this->panier;}
        public function getProduit() {return $this->produit;}
        public function getVentePriveeDetail() {return $this->vente_privee_detail;}
        public function getQuantite() {return $this->quantite;}

        public function setPanier($temp) {$this->panier = $temp;}
        public function setProduit($temp) {$this->produit = $temp;}
        public function setVentePriveeDetail($temp) {$this->vente_privee_detail = $temp;}
        public function setQuantite($temp) {$this->quantite = intval($temp);}
    }

?>